######################################################
######################################################
######### Reqired Libraries
######################################################
######################################################

library(sfaPA)
library(msm)
library(MASS)
library(distr)
library(truncnorm)
library(VGAM)
library(devtools)

rm(list=ls())
  CongressNum <- 112

##Set to TRUE for a long run and to save output
longrun<-FALSE
save.out<-FALSE


######################################################
######################################################
######### Prepare Data
######################################################
######################################################

load("dtm_112")
load("votemat_112")
nom.data<-read.csv("dwnom112.csv")
#Create empirical cdf for extrapolation
unique.dtm<-sort(unique(as.vector(dtm2)))

seq.vec<-c(-1:(max(dtm2)+2))
for(i in 2:length(seq.vec)) ifelse(seq.vec[i]%in%unique.dtm, seq.vec[i]<-seq.vec[i-1]+1,seq.vec[i]<-seq.vec[i-1] )

rank.mat<-0*dtm2
for(i in 1:nrow(dtm2)) for(j in 1:ncol(dtm2)) rank.mat[i,j]<-seq.vec[dtm2[i,j]+2]

empir.all<-0


which.ran.drop<-c( 6, 20 ,27 ,38 ,57, 59, 63 ,87, 90 ,98)
dtm3<-rbind(t(votes.mat),t(dtm2))
miss.vote<-1*(votes.mat==0.5)
miss.vote.ran<-miss.vote;miss.vote.ran[which.ran.drop,]<-1
lead.names<-tolower(c("REID","SCHUMER","MCCONN","KYL"))
lead.vec<-sapply(lead.names,FUN=function(x) grep(x,nom.data[,4]))
miss.vote.lead<-miss.vote;miss.vote.lead[-c(lead.vec),]<-1

missing.mat<-rbind(t(miss.vote),t(dtm2)*0)*1
missing.mat.ran<-rbind(t(miss.vote.ran),t(dtm2)*0)*1
missing.mat.lead<-rbind(t(miss.vote.lead),t(dtm2)*0)*1


######################################################
######################################################
######### Analyze and save
######################################################
######################################################

if(longrun){
	set.seed(1);scale.text.ran<-sparsemix(dtm3,missing.mat.ran, max.loop=1000, burnin=2000, empir.cdf=empir.all, cutoff.seq=seq.vec, thin.save=10, max.optim=200)
	}else{
	set.seed(1);scale.text.ran<-sparsemix(dtm3,missing.mat.ran, max.loop=500, burnin=500, empir.cdf=empir.all, cutoff.seq=seq.vec, thin.save=1, max.optim=200)	
	}

if(save.out) save(scale.text.ran,file="PA_Random_Impute")

#
